﻿#ifndef ANALYZER_CONTROL_H
#define ANALYZER_CONTROL_H

#include <string>
#include <vector>
#include <opencv2/opencv.hpp>

namespace AVSAnalyzer {

	struct Control
	{
		// 布控请求必需参数
	public:
		std::string code;									//布控编号
		std::string streamUrl;								//拉流地址
		bool        pushStream = false;						//是否推流
		std::string pushStreamUrl;							//推流地址
		std::string algorithmCode;							//算法编号=>gid&&gname
		// std::string objects;								//算法支持所有分类
		// std::vector<std::string> objects_v1;
		// int objects_v1_len;

		std::string objectCode;								//目标检测分类编号
		double threshold = 0.5;								//目标检测得分阈值
		
		std::string		       recognitionRegion;			//算法识别区域坐标点 x1, y1, x2, y2, x3, y3, x4, y4
		std::vector<double>    recognitionRegion_d;			//算法识别区域坐标点 x1, y1, x2, y2, x3, y3, x4, y4
		std::vector<cv::Point> recognitionRegion_points;	//算法识别区域

		int64_t minInterval = 180000;						// 布控最小的报警间隔时间（单位毫秒），3分钟=3*60*1000=180000毫秒
		int64_t mframeInterval = 1;							// 布控最小检测间隔帧数
	public:
		// 通过计算获得的参数

		int64_t startTimestamp = 0;							// 执行器启动时毫秒级时间戳（13位）
		float   checkFps = 0;								// 算法检测的帧率（每秒检测的次数）
		int     videoWidth = 0; 							// 布控视频流的像素宽
		int     videoHeight = 0;							// 布控视频流的像素高
		int     videoChannel = 0;							// 布控视频流的通道数
		int     videoIndex = -1;							// 布控视频流的索引
		int     videoFps = 0;
		bool    runningState = false;                    	//运行状态，表示推理模块是否正常调度
	public:
		bool parseRecognitionRegion();
		bool validateAdd(std::string& result_msg);
		bool validateCancel(std::string& result_msg);
	};
}
#endif //ANALYZER_CONTROL_H
